package it.polimi.traveldream.persistence;

import java.io.Serializable;

import javax.persistence.*;

import java.util.LinkedList;
import java.util.List;


/**
 * The persistent class for the utente database table.
 * 
 */
@Entity
@NamedQueries({
	@NamedQuery(name="Utente.findAll", query="SELECT u FROM Utente u"),
	@NamedQuery(name="Utente.updateNome", query="UPDATE Utente u SET u.nome= :nome WHERE u.email= :email"),
	@NamedQuery(name="Utente.findByNameAndSurname", query="SELECT u FROM Utente u WHERE u.nome LIKE :nome AND u.cognome LIKE :cognome"),
	@NamedQuery(name="Utente.findByName",query="SELECT u FROM Utente u WHERE u.nome LIKE :nome"),
	@NamedQuery(name="Utente.findBySurname", query="SELECT u FROM Utente u WHERE u.cognome LIKE :cognome")
})
public class Utente implements Serializable {
	private static final long serialVersionUID = 1L;

	public static final String FIND_ALL = "Utente.findAll";
	
	public static final String UPDATE_NOME = "Utente.updateNome";
	
	public static final String FIND_BY_NAME_SURNAME= "Utente.findByNameAndSurname";
	
	public static final String FIND_BY_NAME= "Utente.findByName";
	
	public static final String FIND_BY_SURNAME="Utente.findBySurname";

	@Id
	private String email;

	private String cognome;

	private String nome;

	private String password;

	@ElementCollection(targetClass = GruppoUtente.class)
	@CollectionTable(name = "GRUPPO_UTENTE", joinColumns = @JoinColumn(name = "EMAIL"))
	@Enumerated(EnumType.STRING)
	@Column(name = "TIPO_GRUPPO")
	private List<GruppoUtente> gruppoUtente = new LinkedList<GruppoUtente>();

	//bi-directional many-to-one association to GiftListHotel
	@OneToMany(mappedBy="utente")
	private List<GiftListHotel> giftListHotels= new LinkedList<GiftListHotel>();

	//bi-directional many-to-one association to GiftListTour
	@OneToMany(mappedBy="utente")
	private List<GiftListTour> giftListTours= new LinkedList<GiftListTour>();

	//bi-directional many-to-one association to GiftListVolo
	@OneToMany(mappedBy="utente")
	private List<GiftListVolo> giftListVolos= new LinkedList<GiftListVolo>();

	//bi-directional many-to-one association to Hotel
	@OneToMany(mappedBy="utente")
	private List<Hotel> hotels= new LinkedList<Hotel>();

	//bi-directional many-to-one association to Pacchetto
	@OneToMany(mappedBy="utente")
	private List<Pacchetto> pacchettos= new LinkedList<Pacchetto>();

	//bi-directional many-to-one association to PacchettoPersonalizzato
	@OneToMany(mappedBy="utente")
	private List<PacchettoPersonalizzato> pacchettoPersonalizzatos= new LinkedList<PacchettoPersonalizzato>();

	//bi-directional many-to-one association to Tour
	@OneToMany(mappedBy="utente")
	private List<Tour> tours= new LinkedList<Tour>();

	//bi-directional many-to-one association to TrattaVolo
	@OneToMany(mappedBy="utente")
	private List<TrattaVolo> trattaVolos= new LinkedList<TrattaVolo>();

	public Utente() {
	}

	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getCognome() {
		return this.cognome;
	}

	public void setCognome(String cognome) {
		this.cognome = cognome;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public List<GiftListHotel> getGiftListHotels() {
		return this.giftListHotels;
	}

	public void setGiftListHotels(List<GiftListHotel> giftListHotels) {
		this.giftListHotels = giftListHotels;
	}

	public GiftListHotel addGiftListHotel(GiftListHotel giftListHotel) {
		getGiftListHotels().add(giftListHotel);
		giftListHotel.setUtente(this);

		return giftListHotel;
	}

	public GiftListHotel removeGiftListHotel(GiftListHotel giftListHotel) {
		getGiftListHotels().remove(giftListHotel);
		giftListHotel.setUtente(null);

		return giftListHotel;
	}

	public List<GiftListTour> getGiftListTours() {
		return this.giftListTours;
	}

	public void setGiftListTours(List<GiftListTour> giftListTours) {
		this.giftListTours = giftListTours;
	}

	public GiftListTour addGiftListTour(GiftListTour giftListTour) {
		getGiftListTours().add(giftListTour);
		giftListTour.setUtente(this);

		return giftListTour;
	}

	public GiftListTour removeGiftListTour(GiftListTour giftListTour) {
		getGiftListTours().remove(giftListTour);
		giftListTour.setUtente(null);

		return giftListTour;
	}

	public List<GiftListVolo> getGiftListVolos() {
		return this.giftListVolos;
	}

	public void setGiftListVolos(List<GiftListVolo> giftListVolos) {
		this.giftListVolos = giftListVolos;
	}

	public GiftListVolo addGiftListVolo(GiftListVolo giftListVolo) {
		getGiftListVolos().add(giftListVolo);
		giftListVolo.setUtente(this);

		return giftListVolo;
	}

	public GiftListVolo removeGiftListVolo(GiftListVolo giftListVolo) {
		getGiftListVolos().remove(giftListVolo);
		giftListVolo.setUtente(null);

		return giftListVolo;
	}

	public List<GruppoUtente> getGruppoUtente() {
		return this.gruppoUtente;
	}

	public void setGruppoUtente(List<GruppoUtente> gruppoutentes) {
		this.gruppoUtente = gruppoutentes;
	}

	public List<Hotel> getHotels() {
		return this.hotels;
	}

	public void setHotels(List<Hotel> hotels) {
		this.hotels = hotels;
	}

	public Hotel addHotel(Hotel hotel) {
		getHotels().add(hotel);
		hotel.setUtente(this);

		return hotel;
	}

	public Hotel removeHotel(Hotel hotel) {
		getHotels().remove(hotel);
		hotel.setUtente(null);

		return hotel;
	}

	public List<Pacchetto> getPacchettos() {
		return this.pacchettos;
	}

	public void setPacchettos(List<Pacchetto> pacchettos) {
		this.pacchettos = pacchettos;
	}

	public Pacchetto addPacchetto(Pacchetto pacchetto) {
		getPacchettos().add(pacchetto);
		pacchetto.setUtente(this);

		return pacchetto;
	}

	public Pacchetto removePacchetto(Pacchetto pacchetto) {
		getPacchettos().remove(pacchetto);
		pacchetto.setUtente(null);

		return pacchetto;
	}

	public List<PacchettoPersonalizzato> getPacchettoPersonalizzatos() {
		return this.pacchettoPersonalizzatos;
	}

	public void setPacchettoPersonalizzatos(List<PacchettoPersonalizzato> pacchettoPersonalizzatos) {
		this.pacchettoPersonalizzatos = pacchettoPersonalizzatos;
	}

	public PacchettoPersonalizzato addPacchettoPersonalizzato(PacchettoPersonalizzato pacchettoPersonalizzato) {
		getPacchettoPersonalizzatos().add(pacchettoPersonalizzato);
		pacchettoPersonalizzato.setUtente(this);

		return pacchettoPersonalizzato;
	}

	public PacchettoPersonalizzato removePacchettoPersonalizzato(PacchettoPersonalizzato pacchettoPersonalizzato) {
		getPacchettoPersonalizzatos().remove(pacchettoPersonalizzato);
		pacchettoPersonalizzato.setUtente(null);

		return pacchettoPersonalizzato;
	}

	public List<Tour> getTours() {
		return this.tours;
	}

	public void setTours(List<Tour> tours) {
		this.tours = tours;
	}

	public Tour addTour(Tour tour) {
		getTours().add(tour);
		tour.setUtente(this);

		return tour;
	}

	public Tour removeTour(Tour tour) {
		getTours().remove(tour);
		tour.setUtente(null);

		return tour;
	}

	public List<TrattaVolo> getTrattaVolos() {
		return this.trattaVolos;
	}

	public void setTrattaVolos(List<TrattaVolo> trattaVolos) {
		this.trattaVolos = trattaVolos;
	}

	public TrattaVolo addTrattaVolo(TrattaVolo trattaVolo) {
		getTrattaVolos().add(trattaVolo);
		trattaVolo.setUtente(this);

		return trattaVolo;
	}

	public TrattaVolo removeTrattaVolo(TrattaVolo trattaVolo) {
		getTrattaVolos().remove(trattaVolo);
		trattaVolo.setUtente(null);

		return trattaVolo;
	}

}